
package br.com.conciliador.upload.vo;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.conciliador.seguranca.vo.UsuarioVo;
import br.com.conciliador.upload.vo.filtro.FiltroHeaderArquivoRemessaVendasVo;
import br.com.r2.util.tipodado.Data;
import br.com.r2.util.tipodado.DataHora;
import br.com.r2.util.tipodado.Inteiro;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Moeda;
import br.com.r2.util.tipodado.Texto;

@Entity
@Table(name = "TBHAV")
@Proxy(lazy = true)
public class HeaderArquivoRemessaVendasVo implements Serializable
{

   /**
    * 
    */
   private static final long serialVersionUID = 7350469851217754019L;

   @Id
   @Column(name = "HAVCD")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator", parameters = { @Parameter(name = "sequence", value = "SQHAV") })
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @Column(name = "HAVTPRGT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro tipoRegistro;

   @Column(name = "HAVVSLYT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro versaoLayout;

   @Column(name = "HAVTP")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro tipoArquivo;
   
   @Formula("(SELECT DN.DMNNMVLR FROM TBDMN DN WHERE DN.DMNNMCMP = 'HAVTP' AND DN.DMNFGATV = 'S' AND DN.DMNVLCMP = HAVTP)")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto descricaoTipoArquivo;

   @Column(name = "HAVDTGRC")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataUT")
   private Data dataGeracao;

   @Column(name = "HAVDTVNDINI")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataUT")
   private Data dataVendaInicio;

   @Column(name = "HAVDTVNDFIM")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataUT")
   private Data dataVendaFinal;

   @Column(name = "HAVSSTORG")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto sistemaOrigem;

   @Column(name = "HAVSSTDST")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto sistemaDestino;

   @Column(name = "HAVCDSEQ")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo sequencial;

   @Column(name = "HAVCDCLI")
   private String codigoCliente;

   @Column(name = "HAVQTRGT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro quantidadeRegistros;
   
   @Column(name = "HAVVLRGT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.MoedaUT")
   private Moeda valorRegistros;

   @Column(name = "USRDTINC")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataHoraUT")
   private DataHora dataRecebimento;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USRCDINC")
   private UsuarioVo usuarioRecebimentoVo;

   @OneToMany(mappedBy = "headerVo", fetch = FetchType.LAZY)
   @Cascade(CascadeType.ALL)
   private Set<DetalheArquivoRemessaVendasVo> listaDetalheArquivoRemessaVendasVo;
   
   @Transient
   private FiltroHeaderArquivoRemessaVendasVo filtro;
   
   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public Inteiro getTipoRegistro()
   {
      return tipoRegistro;
   }

   public void setTipoRegistro(Inteiro tipoRegistro)
   {
      this.tipoRegistro = tipoRegistro;
   }

   public Inteiro getVersaoLayout()
   {
      return versaoLayout;
   }

   public void setVersaoLayout(Inteiro versaoLayout)
   {
      this.versaoLayout = versaoLayout;
   }

   public Inteiro getTipoArquivo()
   {
      return tipoArquivo;
   }

   public void setTipoArquivo(Inteiro situacao)
   {
      this.tipoArquivo = situacao;
   }

   public Data getDataGeracao()
   {
      return dataGeracao;
   }

   public void setDataGeracao(Data dataGeracao)
   {
      this.dataGeracao = dataGeracao;
   }

   public Data getDataVendaInicio()
   {
      return dataVendaInicio;
   }

   public void setDataVendaInicio(Data dataVendaInicio)
   {
      this.dataVendaInicio = dataVendaInicio;
   }

   public Data getDataVendaFinal()
   {
      return dataVendaFinal;
   }

   public void setDataVendaFinal(Data dataVendaFinal)
   {
      this.dataVendaFinal = dataVendaFinal;
   }

   public Texto getSistemaOrigem()
   {
      return sistemaOrigem;
   }

   public void setSistemaOrigem(Texto sistemaOrigem)
   {
      this.sistemaOrigem = sistemaOrigem;
   }

   public Texto getSistemaDestino()
   {
      return sistemaDestino;
   }

   public void setSistemaDestino(Texto sistemaDestino)
   {
      this.sistemaDestino = sistemaDestino;
   }

   public InteiroLongo getSequencial()
   {
      return sequencial;
   }

   public void setSequencial(InteiroLongo sequencial)
   {
      this.sequencial = sequencial;
   }

   public String getCodigoCliente()
   {
      return codigoCliente;
   }

   public void setCodigoCliente(String codigoCliente)
   {
      this.codigoCliente = codigoCliente;
   }

   public DataHora getDataRecebimento()
   {
      return dataRecebimento;
   }

   public void setDataRecebimento(DataHora dataRecebimento)
   {
      this.dataRecebimento = dataRecebimento;
   }

   public UsuarioVo getUsuarioRecebimentoVo()
   {
      return usuarioRecebimentoVo;
   }

   public void setUsuarioRecebimentoVo(UsuarioVo usuarioRecebimentoVo)
   {
      this.usuarioRecebimentoVo = usuarioRecebimentoVo;
   }

   public Inteiro getQuantidadeRegistros()
   {
      return quantidadeRegistros;
   }

   public void setQuantidadeRegistros(Inteiro quantidadeRegistros)
   {
      this.quantidadeRegistros = quantidadeRegistros;
   }

   public Moeda getValorRegistros()
   {
      return valorRegistros;
   }

   public void setValorRegistros(Moeda valorRegistros)
   {
      this.valorRegistros = valorRegistros;
   }

   public Set<DetalheArquivoRemessaVendasVo> getListaDetalheArquivoRemessaVendasVo()
   {
      return listaDetalheArquivoRemessaVendasVo;
   }

   public void setListaDetalheArquivoRemessaVendasVo(
         Set<DetalheArquivoRemessaVendasVo> listaDetalheArquivoRemessaVendasVo)
   {
      this.listaDetalheArquivoRemessaVendasVo = listaDetalheArquivoRemessaVendasVo;
   }

   public FiltroHeaderArquivoRemessaVendasVo getFiltro()
   {
      return filtro;
   }

   public void setFiltro(FiltroHeaderArquivoRemessaVendasVo filtro)
   {
      this.filtro = filtro;
   }

   public Texto getDescricaoTipoArquivo()
   {
      return descricaoTipoArquivo;
   }

   public void setDescricaoTipoArquivo(Texto descricaoSituacao)
   {
      this.descricaoTipoArquivo = descricaoSituacao;
   }
}
